package com.reload.core;

import reactor.core.publisher.Flux;

/**
 * @Date: 2024/4/27 0027 - 13:44
 * @Version: 17
 * @Author: Reloading
 * @Description: 请求重塑
 */
public class ReshapeRequests {
    public static void main(String[] args) {
        // buffer();
        limit();
    }

    public static void buffer() {
        Flux.range(1, 10)
                // 添加一个缓冲区 缓冲4个元素
                // 消费者一次最大拿到4个元素  元素的类型是 Arraylist
                // 凑满缓冲区后一次性发送给消费者
                .buffer(4)
                .log()
                .subscribe(e -> {
                    System.out.println("e = " + e);
                });

        // 消费者如果每次 request(1) 拿到的是几个真正的数据？ buffer的数据
        // request(N) --> 找发布者请求N次，数据总数为 N * buffer.size
    }

    public static void limit() {
        Flux.range(1, 1000)
                .log()
                // 第一次预取100个元素
                // 75%预取策略  第一次 request(100) 第二次 request(100*75%)  第三次 request(100*75%)
                .limitRate(100)
                .subscribe();
    }
}
